Skip to content
This repository has been archived by the owner on Sep 1, 2020. It is now read-only.

Latest commit

 

History

History
46 lines (36 loc) · 1.48 KB

3.7.5 - Coroutine/Socket->connect.md

File metadata and controls

46 lines (36 loc) · 1.48 KB

Coroutine\Socket->connect

连接到目标服务器。调用此方法会发起异步的connect系统调用,并挂起当前协程,底层会监听可写,当连接完成或失败后,恢复该协程。

该方法适用于Client端,支持IPv4IPv6UnixSocket

function Coroutine\Socket->connect(string $host, int port = 0, double $timeout = -1) : bool;

参数

  • $host:目标服务器的地址,如127.0.0.1192.168.1.100/tmp/php-fpm.sockwww.baidu.com等,可以传入IP地址、Unix Socket路径或域名。若为域名,底层会自动进行异步的DNS解析,不会引起阻塞
  • $port:目标服务器端口,SocketdomainAF_INETAF_INET6时必须设置端口
  • $timeout:超时时间,底层会设置定时器,在规定的时间内未能建立连接,connect将返回false

返回值

  • 超时或connect系统调用报错时返回false,可使用errCode属性获取错误码,其中超时错误码为ETIMEDOUT
  • 成功返回true

实例

$socket = new Co\Socket(AF_INET, SOCK_STREAM, 0);

go(function () use ($socket) {
    $retval = $socket->connect('localhost', 9601);
    while ($retval)
    {
        $n = $socket->send("hello");
        var_dump($n);

        $data = $socket->recv();
        var_dump($data);

        if (empty($data)) {
            $socket->close();
            break;
        }
        co::sleep(1.0);
    }
    var_dump($retval, $socket->errCode);
});